/*
 * consola.c
 *
 *  Created on: 10/10/2011
 *      Author: MadeYMaga
 */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/un.h>
#include <sys/types.h>
#include <pthread.h>
#include "consola.h"
#include "bootsecto.h"

int atenderConsola(){

	char 		buffer[80];

	printf("\n> Escriba un comando o help para ver los comandos disponibles :)\n");

	do
	{
		memset(buffer, 0, 80);
		printf("> ");
		fgets(buffer, 80, stdin);

		if (NULL != strchr(buffer, '\n'))
			*strchr(buffer, '\n') = '\0';

	}while(buscarComando(buffer));

	return 0;
}

/* Si es quit cierra la conexion sino devuelve 1 */
/* COMANDOS CON PARAMETROS FORMATO: comando(parametro) */
int buscarComando(char *buffer){

	char *comando = NULL, *parametro = NULL;

	comando = strtok(buffer, "(");

	printf("> Comando: %s\n", comando);

	if(comando == NULL)
	{
		printf("> No se ha ingresado ningun comando...\n");
		return 1;
	}

	parametro = strtok(NULL, ")");

	if(!strcmp("fsinfo", comando))
	{
		fsinfo();
	}
	else if (!strcmp("finfo", comando))
	{
		if (parametro == NULL)
		{
			printf("> Falta el parametro del finfo.\n");
			return 1;
		}
		finfo(parametro);
	}
	else if(!strcmp("help", comando))
	{
		help();
	}
	else if (!strcmp("quit", comando))
	{
		printf("> Se cerro la conexion de la consola.\n");
//TODO		pthread_exit();
		return 1;
	}
	else {
		printf("> Comando no reconocido. Escriba help para ver los comandos disponibles.\n");
	}

	return 0;
}

int fsinfo(){

	int			cantidad = 0, clustersTotales;

//	getFreeClusters(cantidad);

	//  TODO getTotalCLusters(clustersTotales)
	// TODO consultar que me da la fatSize (en bytes o es un entero?)

//	printf("> Cantidad de clusters ocupados: %d\n", (clustersTotales-cantidad));
	printf("> Cantidad de clusters libres: %d\n", cantidad);
	printf("> Tamaño de un sector (en bytes): %d\n", 512);
//	printf("> Tamaño de un cluster (en bytes): %d\n", (bootSec.sectorPerCluster*512));
//	printf("> Tamaño de la FAT (en kilobytes): %d\n", bootSec.fatSize);

	return 0;
}

int help(){

	printf("> Los comandos disponibles son: \n\n");
	printf("> %-15s%s\n", "Comando", "Parametros \n");

	printf("> %-15s%s\n", "fsinfo", "sin parametros");
	printf("> Descripcion: Muestra la cantidad de clusters ocupados, la cantidad de clusters libres, el tamaño de un sector (en bytes), el de un cluster (en bytes) y el tamaño de la FAT (en kilobytes).\n\n");
	printf("> %-15s%s\n", "finfo", "path de un archivo");
	printf("> Descripcion: Muestra como máximo los 20 primeros números de clusters asociados a un archivo.\n\n");
	printf("> %-15s%s\n", "quit", "sin parametros");
	printf("> Descripcion: Salir del programa. \n\n");

	return 0;
}

int finfo(char *path){

	int i;
	unsigned int cluster;

	//TODO funcion que le pido tantos clusters de un archivo pasandole el path

	printf("Clusters: \n");

	for(i=0; i<20; i++)
	{
//		cluster = clusterDeUnArchivo(path, i);  //TODO esta funcion me  devuelve -1 si el archivo no tiene el cluster pedido
		if( cluster != -1 )
		{
			printf("%d°: %d\n", (i+1), cluster);
		}
		else
		{
			return 0;
		}
	}

	return 0;
}
